Schemify
Github Pages

Publish Your Circuit to GitHub Pages

Every Schemify project can be deployed as a live, interactive web viewer with one workflow file. Visitors get a full read-only schematic editor in their browser — no install required.


Quick Start (2 steps)

1 — Enable GitHub Pages

In your circuit repo: Settings → Pages → Source → GitHub Actions

2 — Add the workflow

Create .github/workflows/schemify-pages.yml in your repo:

name: View on Schemify

on:
  push:
    branches: [main]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  deploy:
    uses: UWASIC/Schemify/.github/workflows/deploy-pages.yml@main
    permissions:
      pages: write
      id-token: write
    with:
      project_dir: '.'        # directory containing Config.toml
      schemify_version: 'latest'

Push to main. The workflow posts the live URL to the Actions summary when it completes.

Copy the full template from scripts/templates/schemify-pages.yml.


What gets deployed

The workflow reads your Config.toml and bundles:

File type Included
.chn schematics
.chn_tb testbenches
.sch / .sym (xschem)
.cir / .spice models
Config.toml
Simulation output / generated files

Options

Schematics in a subdirectory

    with:
      project_dir: 'hardware'   # reads hardware/Config.toml

Pin a specific Schemify version

    with:
      schemify_version: 'v0.3.0'

Embed alongside a VitePress / MkDocs site

Build your docs site first, then pass the built output directory as embed_in. The Schemify viewer lands at <your-site>/schematic/.

jobs:
  build-docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run docs:build    # or mkdocs build, etc.
      - uses: actions/upload-artifact@v4
        with:
          name: docs
          path: docs/.vitepress/dist

  deploy:
    needs: build-docs
    uses: UWASIC/Schemify/.github/workflows/deploy-pages.yml@main
    permissions:
      pages: write
      id-token: write
    with:
      embed_in: docs/.vitepress/dist

How it works

push to main
    │
    ▼
Checkout your repo
    │
    ▼
Download release assets  (from latest Schemify release)
  ├─ schemify.wasm
  ├─ web.js           (dvui JS runtime)
  ├─ schemify_host.js (host VFS bridge)
  ├─ vfs.js           (in-page VFS map)
  └─ vfs-worker.js    (OPFS persistence worker)
    │
    ▼
build-viewer.mjs
  ├─ reads Config.toml  →  project name, file list
  ├─ copies .chn / .sch / .sym / Config.toml → schemify-out/
  ├─ copies all 5 runtime assets → schemify-out/
  ├─ writes files.json  (file manifest)
  ├─ generates boot.js  (seeds VFS from manifest, boots WASM)
  └─ generates index.html
    │
    ▼
Deploy schemify-out/  →  github-pages environment
    │
    ▼
https://<user>.github.io/<repo>/   ← posted to workflow summary

The viewer uses a two-namespace WASM import object — dvui (rendering, provided by web.js) and host (VFS + platform, provided by schemify_host.js). On load, boot.js fetches every project file listed in files.json, populates a JavaScript Map backed by vfs.js, then instantiates schemify.wasm with both namespaces.


Troubleshooting

Symptom Fix
Workflow fails: gh release download: no assets Schemify hasn't cut a WASM release yet — pin schemify_version: main to build from source
Blank page / console errors about web.js or schemify_host.js Check that project_dir points to the directory containing Config.toml, not a parent
Files not loading in viewer Filenames are case-sensitive on Linux — check Config.toml paths match exactly
Pages shows old content GitHub Pages CDN caches aggressively — hard-refresh with Ctrl+Shift+R